const express = require("express");

// 加载 token 解析认证模块
const jwt = require("express-jwt")

// 创建 app 对象
const app = express();
app.listen(3003, () => console.log("服务已启动,正在监听3003端口"));

// 验证token ，解析失败直接进入错误处理中间件
// jwt() 用于解析token ,并将token 中保存的数据赋值给 req.user
// unless() 完成身份认证
app.use(jwt({
    secret: 'yyds', // 登录接口中，生成token时使用的secret
    algorithms: ['HS256']  // 加密算法，了解
}).unless({path: ['/api/login','/api/reguser']}));
// unless 中保存的接口，就可以不需要进行token验证，其他接口度需要进行认证



// 配置 + 编写接口
// 这行配置的意思，接受客户端提交的请求体，并且赋值给 req.body , req.body = { 客户端提交的数据 }
app.use(express.urlencoded({ extended: true }))


// 加载自定义的路由模块，并组成成中间件
let loginRouter = require("./routers/login");
// 注册中间件
app.use('/api', loginRouter);



// 加载自定义的路由模块，并组成成中间件 (只要是'/my/user'开头的请求，都去 user.js进行处理 )
app.use('/my/user', require("./routers/user"));


// 错误处理中间件
app.use(function (err, req, res, next) {
    // 如果 token 解析处理问题，则进入下面判断
    if (err.name === 'UnauthorizedError') {
      res.status(401).send({code: 400, msg: '身份认证失败'});
    }
});
